#include <stdio.h>
#include <stdint.h>

#include "xlog.h"

#include "str_array.h"

int main(int argc, char ** argv)
{
	xlog(" this is str_array \n");
	xerr(" this is str_array @_@ \n");

	{
		sq_str * s = 0;
		sq_str_create(&s);
		sq_str_assign(s, "hello");
		sq_str_display(s);

		sq_str * t = 0;
		sq_str_clone(s, &t);
		sq_str_display(t);

		sq_str * ss = 0;
		sq_str_substr(s, 1, 4, &ss);
		sq_str_display(ss);

		sq_str * sss = 0;
		sq_str_create(&sss);
		sq_str_assign(sss, "@_@");
		sq_str_copy(s, sss);
		sq_str_display(sss);
		xlog("s === sss : %d \n", sq_str_eq(s, sss));
		sq_str_cat(sss, s);
		sq_str_display(sss);
		xlog("s === sss : %d \n", sq_str_eq(s, sss));

		xlog("s->len %" _PRI64_ "u \n", sq_str_len(s));
		xlog("t->len %" _PRI64_ "u \n", sq_str_len(t));
		xlog("ss->len %" _PRI64_ "u \n", sq_str_len(ss));

		sq_str_release(s);
		sq_str_release(t);
		sq_str_release(ss);

		xlog("\n\n");
	}

	{
		sq_str * hello = 0;
		sq_str * world = 0;
		sq_str * s = 0;

		sq_str_create(&hello);
		sq_str_create(&world);
		sq_str_create(&s);

		sq_str_assign(hello, "hello");
		sq_str_assign(world, "world");
		sq_str_assign(s, "----");

		sq_str_display(hello);
		sq_str_display(world);
		sq_str_display(s);

		sq_str_insert(s, 2, hello);
		sq_str_display(s);

		sq_str_insert(s, 8, world);
		sq_str_display(s);

		sq_str_del(s, 2, 6);
		sq_str_display(s);

		sq_str_replace(s, 0, 2, world);
		sq_str_display(s);

		sq_str_replace(s, 0, 5, hello);
		sq_str_display(s);

		sq_str_del(s, 0, 6);
		sq_str_display(s);

		sq_str_cat(hello, world);
		sq_str_display(hello);

		sq_str_replace(s, 1, 6, hello);
		sq_str_display(s);

		xlog("\n\n");
	}

	{
		sq_str * s = 0;
		sq_str_create(&s);
		sq_str_assign(s,
				"aafje3ifjijfdjdfhghdfiohajkhjkjfdkslflllsdfjiaejifdjkafdjf"
				"kdsajfjioehfhdjkvhcjhjhjhjhjhe4ufreagjfdnfffgiuhfajdsksaks"
				"kkssssjhe3jrhjewjeddeeeeeeeeeeef9f9999q0-E---FI0939U89U8FU"
				"8UIWHAFDLSLLLLLLLLLLLLLLLLLLJFIEIIIISIIFJELSIFJ9838U494T8H"
				"UHVJHFDJHFJDHJGHGGHJ");

		const byte * p = 0;
		size_t l = 0;
		sq_str_find_repeator(s, &p, &l);
		xlog("posi : %" _PRI64_ "d, len : %" _PRI64_ "u : %c \n\n", p - s->data, l, *p);

		sq_str * needle = 0;
		sq_str_create(&needle);
		sq_str_assign(needle, "jhjhjhe");

		sq_str_display(s);
		sq_str_display(needle);

		int index = sq_str_bf(s, needle);
		xlog("bf return %d \n", index);

		int jndex = sq_str_kmp(s, needle);
		xlog("kmp return %d \n", jndex);
	}

	{
		test_kmp_nv();
	}

	return 0;
}


